package com.cjl.demo.data;

/**
 * <p>Description: </p>
 * 围圈报数游戏
 * 100个人（编号0~99）围成一圈，从0号人开始报数（从1开始），报到3的人退出，
 * 后面的人继续从1开始报数，问，最后剩下的一个人是几号？
 *
 * @ uthor chenjinliang
 * @ date: 2020/7/15
 */
public class WeiQuanBaoShu {

    public static void main(String[] args) {
        System.out.println("args = [" + getindex(100) + "]");
    }

    public static int getindex(int totalNum) {
        int[][] total = new int[100][2];
        int count = 0;
        for (int i = 0; i < totalNum; i++) {
            total[i][0] = i; //初始化编号
            total[i][1] = 0; //记录状态，初始0，在队列中，1则出列
        }
        int j = 0;
        int remain = totalNum; //记录剩余人数
        while (remain > 0) {
            if (total[j % 100][1] == 0) {
                count++;
                if (count == 3) {
                    total[j % 100][1] = 1; //值为3，出列
                    remain--;
                    count = 0;
                }
                if (remain == 1) {
                    return j % 100;
                }
            }
            j++; // j增加，循环继续
        }
        return 0;
    }
}
